﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using Mesgesssystem;
using DevExpress.XtraEditors;
using MesgessSystem.JXMessgesSystem;
using System.Threading;
using log4net;
using System.Runtime.InteropServices;

namespace MesgessSystem
{
    public partial class SetsLoginFrm : XtraForm
    {
        private static ILog _log = LogManager.GetLogger(typeof(SetsLoginFrm));
        Thread _quDengRu;
        Thread _NoNetAccess;
        public SetsLoginFrm()
        {
            InitializeComponent();
        }

        private void btnPassword_Click(object sender, EventArgs e)
        {
            AnimateWindow(this.Handle, 500, AW_BLEND | AW_HIDE);
            Application.Exit();
        }

        /// <summary>
        /// 联网下登录 调用远端数据库服务器验证
        /// </summary>
        void DengRu()
        {
            this.BeginInvoke(new Action(() =>
            {
                DBHelper db = new DBHelper();//建立数据库操作类对象
                string SqlText = "select * from userinfo where usermane =@userid and userpassword =@password";
                SqlParameter pUserID = new SqlParameter("@userid", txtName.Text.ToString());
                SqlParameter pUserpass = new SqlParameter("@password", txtPassword.Text.ToString());    
                DataSet dt = db.DBselect(SqlText, pUserID, pUserpass);
                if (dt.Tables[0].Rows.Count == 0)
                {
                    _log.Error("没有找到数据库中的表(用户名或者密码输入错误)---请检查数据库是否正确或者是否在联网状态下！");
                    MessageBox.Show(" 密 码 错 误 ");                 
                }
                else
                {
                    JKMessgesSystem jk = new JKMessgesSystem();
                    jk.Show();
                    this.Hide();
                }
            }
            ));
        }

        /// <summary>
        /// 联网下登录触发事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnName_Click(object sender, EventArgs e)
        {
            _quDengRu = new Thread(new ThreadStart(this.DengRu));
            _quDengRu.Start();
        }

        /// <summary>
        /// 窗体动画函数
        /// </summary>
        /// <param name="hwnd">指定产生动画的窗口的句柄</param>
        /// <param name="dwTime">指定动画持续的时间</param>
        /// <param name="dwFlags">指定动画类型，可以是一个或多个标志的组合。</param>
        /// <returns></returns>
        [DllImport("user32")]
        private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);
        //下面是可用的常量，根据不同的动画效果声明自己需要的
        private const int AW_HOR_POSITIVE = 0x0001;//自左向右显示窗口，该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
        private const int AW_HOR_NEGATIVE = 0x0002;//自右向左显示窗口，该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
        private const int AW_VER_POSITIVE = 0x0004;//自顶向下显示窗口，该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志
        private const int AW_VER_NEGATIVE = 0x0008;//自下向上显示窗口，该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志该标志
        private const int AW_CENTER = 0x0010;//若使用了AW_HIDE标志，则使窗口向内重叠；否则向外扩展
        private const int AW_HIDE = 0x10000;//隐藏窗口
        private const int AW_ACTIVE = 0x20000;//激活窗口，在使用了AW_HIDE标志后不要使用这个标志
        private const int AW_SLIDE = 0x40000;//使用滑动类型动画效果，默认为滚动动画类型，当使用AW_CENTER标志时，这个标志就被忽略
        private const int AW_BLEND = 0x80000;//使用淡入淡出效果
        private void Form1_Load(object sender, EventArgs e)
        {
            int x = Screen.PrimaryScreen.WorkingArea.Left + 510;
            int y = Screen.PrimaryScreen.WorkingArea.Top + 300;
            this.Location = new Point(x, y);//设置窗体在屏幕右下角显示
            AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVE | AW_VER_NEGATIVE);
            txtName.Text = "管理员";
            txtPassword.Text = "123";
        }
        /// <summary>
        /// 无网络通道登录触发事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnNoNetAccess_Click(object sender, EventArgs e)
        {
            _NoNetAccess = new Thread(new ThreadStart(this.NetAccess));
            _NoNetAccess.Start();
        }
        /// <summary>
        /// 无网络通道登录
        /// </summary>
        void NetAccess()
        {
            _log.Debug("登录的用户名为：" + txtName.Text.ToString());
            _log.Debug("登录的密码为：" + txtPassword.Text.ToString());
            this.BeginInvoke(new Action(() =>
            {
                if (txtName.Text.Trim() == "" && txtPassword.Text.Trim() == "")
                {
                    MessageBox.Show("请输入用户名和密码");
                }
                else
                {
                    if (txtName.Text.Trim() == "管理员" && txtPassword.Text.Trim() == "123")
                    {
                        JKMessgesSystem FrmNet = new JKMessgesSystem();
                        FrmNet.Show();
                        this.Hide();
                    }
                    else
                    {
                        _log.Error("没有找到数据库中的表(用户名或者密码输入错误)---请检查数据库是否正确或者是否在联网状态下！");
                        MessageBox.Show("用户名或者密码错误");
                    }
                }
            }));
        }

        /// <summary>
        /// 文字提示背景闪烁
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (label4.BackColor != Color.Blue)
            {
                label4.BackColor = Color.Blue;
            }
            else
            {
                label4.BackColor = Color.Red;
            }
        }
    }
}
